Для начала удалим с диалоговой панели кнопки OK и CANCEL, так как они будут мешать. Создадим два пункта меню. Первый пункт меню это FULL, а второй MINI. И условимся, что сначала инициализироваться список будет как MINI. Итак, создаем два пункта меню. С помощью ClassWizard привяжем к ним события.
void CTestListDlg::OnFull()
{
// TODO: Add your command handler code here
}
void CTestListDlg::OnMini()
{
// TODO: Add your command handler code here
}
В нашем классе CTestList создадим две функции FULL и MINI вот так:
//////////////////////////////////
// CTestList message handlers
void CTestList::Full(CDialog *cd)
{
}
void CTestList::Mini()
{
}
Функции реакции на выбор меню будут вызывать одноименные функции класса CTestList:
void CTestListDlg::OnFull()
{
m_List.Full(this);
}
void CTestListDlg::OnMini()
{
m_List.Mini();
}
Напишем функции:
void CTestList::Full(CDialog *cd)
{
CRect cr;
cd->GetClientRect(cr);
MoveWindow(cr);
}
void CTestList::Mini()
{
MoveWindow(CRect(0,0,100,100));
}
Класс CListBox является наследником CWnd и естественно он умеет двигаться. Для работы мы получаем рабочую область GetClientRect(), а в противном случае просто устанавливаем размеры. Теперь нам надо позаботиться о начальной инициализации размеров:
BOOL CTestListDlg::OnInitDialog()
{
m_List.Mini();
m_List.AddString("США");
m_List.AddString("РОССИЯ");
m_List.AddString("КАНАДА");
m_List.AddString("ЯПОНИЯ");
return TRUE; // return TRUE unless you set the focus to a control
}
Попробуйте. Размер будет меняться.